import * as getI18 from './i18.cjs'
import * as fs from 'fs'
//第二步  替换中文
getI18.dictionary.loadFile(function () {
	new getI18.File().walkDir(
		getI18.filePath,
		function (data, pathStr) {
			let keyStr = pathStr.slice(getI18.filePath.length + 1)
			var lines = data.split('\n')
			// console.log(data, '---------------')
			// console.log(lines, '----------lines-----')
			console.log(pathStr) // 文件路径
			let newLInes = ''
			var _autoImportI18 = autoImportI18(lines, pathStr)
			if (_autoImportI18) {
				newLInes += _autoImportI18 + '\n'
			}
			lines.map((element, line) => {
				/**是否已经t过了 */
				let isHadT = element.match(/\bt\(/g) !== null || element.match(/\bt\(/g) !== null
				// 如果是注释责跳过
				// 如果是注释责跳过
				let isZhuShi = !!element.match(getI18.regNotes)
				if (isZhuShi) {
					// console.log(line,'line---------')
					// console.log(element,'element---------')
					// 该行仅仅含有 *号 并且非*开头的，并且没有 "/* 和*/"的情况，认为不是注释，认为是html文本中的*号
					if (
						element.indexOf('*') !== -1 &&
						element[1] &&
						element[1].indexOf('*') === -1 &&
						element.indexOf('/*') === -1 &&
						element.indexOf('*/') === -1
					) {
						// console.log('s--------------------------')
					} else {
						// console.log('注释的情况--------------------------')
						//注释的情况
						// return
					}
				}
				//  1匹配 '文字' t("文字")
				let matchLine1 = element.match(/'([^']*[\u4e00-\u9fa5]+[^']*)'/g)
				if (!!matchLine1) {
					// console.log(element,'element-----------')
					// console.log(isHadT, matchLine1, '111111111111111')
					if (isHadT) {
						if (element) {
							newLInes += element + '\n'
						}
					} else {
						newLInes +=
							element.replace(/'([^']*[\u4e00-\u9fa5]+[^']*)'/g, function (ch) {
								let getData = getI18.dictionary.get(keyStr + (line + 1) + matchLine1.indexOf(ch))
								return !getData.translate ? ch : getData.translate
							}) + '\n'
					}
					return
				}
				// 2匹配 "文字" {t("文字")}
				let matchLine2 = element.match(/"([^">]*[\u4e00-\u9fa5]+[^"]*)"/g)
				if (!!matchLine2) {
					// console.log(matchLine2, '22222222222222222')
					if (isHadT) {
						if (element) {
							newLInes += element + '\n'
						}
					} else {
						newLInes +=
							element.replace(/"([^"]*[\u4e00-\u9fa5]+[^"]*)"/g, function (ch) {
								let getData = getI18.dictionary.get(keyStr + (line + 1) + matchLine2.indexOf(ch))
								// return !getData.translate ? ch : '{' + getData.translate + '}'
								return !getData.translate ? ch : '' + getData.translate + ''
							}) + '\n'
					}
					return
				}

				// 3匹配 <div>文字</div> {t("文字")}
				let matchLine3 = element.match(/>(.*[\u4e00-\u9fa5]+.*)</g)
				if (!!matchLine3) {
					console.log(matchLine3, 'matchLine3')
					if (matchLine3[0].indexOf('}>') !== -1) {
						let newMatch = element.match(/[\u4e00-\u9fa5].*[\u4e00-\u9fa5]/g)
						newLInes +=
							element.replace(newMatch, function (ch) {
								let getData = getI18.dictionary.get(keyStr + (line + 1) + newMatch.indexOf(ch))
								if (ch.indexOf('(') !== -1) {
									return ch
								}
								return !getData.translate ? ch : '{' + getData.translate + '}'
							}) + '\n'
					} else {
						newLInes +=
							element.replace(/>(.*[\u4e00-\u9fa5]+.*)</g, function (ch) {
								let getData = getI18.dictionary.get(keyStr + (line + 1) + matchLine3.indexOf(ch))
								if (ch.indexOf('(') !== -1) {
									return ch
								}
								return !getData.translate ? ch : '>{' + getData.translate + '}<'
							}) + '\n'
					}
					return
				}

				// 4匹配 单行文字  {t("文字")}
				let matchLine4 = element.match(/[\u4e00-\u9fa5].*[\u4e00-\u9fa5]/g)
				if (!!matchLine4) {
					console.log(element, '444444444444')

					if (isHadT) {
						if (element) {
							newLInes += element + '\n'
						}
					} else {
						newLInes +=
							element.replace(/[\u4e00-\u9fa5].*[\u4e00-\u9fa5]/g, function (ch) {
								let getData = getI18.dictionary.get(keyStr + (line + 1) + matchLine4.indexOf(ch))
								return !getData.translate ? ch : '{' + getData.translate + '}'
							}) + '\n'
					}
					return
				}
				if (element) {
					newLInes += element + '\n'
				} else {
					newLInes += element
				}
			})

			// console.log(newLInes)
			fs.writeFile(pathStr, newLInes, { encoding: 'utf-8', flag: 'w' }, function (err) {
				if (err) throw err
			})
		},
		function () {
			console.log('中文替换 OK')
		}
	)
})
/**
 * 给文件自动引入i18文件
 * @param {*} lines 该文件中的所有行
 * @param {*} filePath 该文件所在的路径
 */
function autoImportI18(lines, filePath) {
	let addImportLine = ''
	/**是否已经引入i18 */
	let isHadImportI18 = false
	/**是否是样式文件 */
	let isStyleFile = false
	/**该文件是否在样式文件夹中 */
	let isPathInStyle =
		filePath.indexOf('/styles/') !== -1 || filePath.indexOf('/style/') !== -1 || filePath.indexOf('style.ts') !== -1
	/**该文件是否引入了样式*/
	let isHaveImportStyled = false
	/**是否已经引入import { t } from 'i18next' */
	let isImportedI18 = false
	/**是否已经引入useTranslation */
	let isImportUseTranslation = false
	if (lines && lines.length) {
		lines.map((item) => {
			if (item.indexOf("import styled from 'styled-components'") !== -1) {
				isHaveImportStyled = true
			}
			if (item.indexOf("import { t } from 'i18next'") !== -1) {
				isImportedI18 = true
			}
			if (item.indexOf("import i18n from '@/i18n'") !== -1) {
				isImportedI18 = true
			}
			if (item.indexOf("import { useTranslation } from 'react-i18next'") !== -1) {
				isImportUseTranslation = true
			}
			return item
		})
		if (isPathInStyle || isHaveImportStyled) {
			isStyleFile = true
		}
		if (isImportedI18 || isImportUseTranslation) {
			isHadImportI18 = true
		}
		/**非样式文件，并且该文件还没有引入过i18，则给该文件自动引入 */
		if (!isStyleFile) {
			if (!isHadImportI18) {
				//确认文件没有引入i18，则在文件的第一行默认引入
				addImportLine += "import { t } from 'i18next'"
			}
		}
	}
	return addImportLine
}
